<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    //Object.defineProperty(obj, prop, descriptor) 方法会直接在一个对象上定义一个新属性，或者修改一个对象的现有属性，并返回此对象
    /*
       obj:要定义属性的对象。
       prop:要定义或修改的属性的名称或 Symbol 。
       descriptor:要定义或修改的属性描述符。
       返回值:被传递给函数的对象。
    */
    let person = {name: "陶品奇"}
    let number=18
    /*Object.defineProperty(person, "age", {
        value: "22",
        enumerable:true, //控制属性是否可以被枚举 默认值false
        writable:true, //控制属性是否可以被修改 默认值false
        configurable:true //控制属性是否可以被删除 默认值false
    })*/

    Object.defineProperty(person,"age",{
        //属性的 getter 函数，如果没有 getter，则为 undefined。当访问该属性时，会调用此函数
        get(){
            return number
        },
        //属性的 setter 函数，如果没有 setter，则为 undefined。当属性值被修改时，会调用此函数。该方法接受一个参数（也就是被赋予的新值）
        set(value) {
            number=value
        }
    })
    console.log(person)
</script>
</body>
</html>
